// 认证服务 - 处理用户登录注册相关的逻辑

// 模拟用户数据存储
const users = [
  {
    id: 1,
    username: 'admin',
    password: 'password', // 在真实应用中，密码应该是加密存储的
    email: 'admin@example.com'
  }
]

/**
 * 用户登录验证
 * @param {string} username - 用户名
 * @param {string} password - 密码
 * @returns {Promise} 返回登录结果
 */
export const login = async (username, password) => {
  // 模拟网络延迟
  await new Promise(resolve => setTimeout(resolve, 800))
  
  // 查找用户
  const user = users.find(u => u.username === username)
  
  if (!user) {
    throw new Error('用户不存在')
  }
  
  // 验证密码
  if (user.password !== password) {
    throw new Error('密码错误')
  }
  
  // 返回用户信息（不包含密码）
  return {
    id: user.id,
    username: user.username,
    email: user.email
  }
}

/**
 * 用户注册
 * @param {string} username - 用户名
 * @param {string} email - 邮箱
 * @param {string} password - 密码
 * @returns {Promise} 返回注册结果
 */
export const register = async (username, email, password) => {
  // 模拟网络延迟
  await new Promise(resolve => setTimeout(resolve, 1000))
  
  // 检查用户名是否已存在
  const existingUser = users.find(u => u.username === username)
  if (existingUser) {
    throw new Error('用户名已存在')
  }
  
  // 检查邮箱是否已存在
  const existingEmail = users.find(u => u.email === email)
  if (existingEmail) {
    throw new Error('邮箱已被注册')
  }
  
  // 创建新用户
  const newUser = {
    id: users.length + 1,
    username,
    password, // 在真实应用中，这里应该加密密码
    email
  }
  
  // 添加到用户列表
  users.push(newUser)
  
  // 返回新用户信息（不包含密码）
  return {
    id: newUser.id,
    username: newUser.username,
    email: newUser.email
  }
}

/**
 * 检查登录状态
 * @returns {boolean} 是否已登录
 */
export const isLoggedIn = () => {
  const loggedIn = localStorage.getItem('isLoggedIn')
  return loggedIn === 'true'
}

/**
 * 获取当前登录用户信息
 * @returns {Object|null} 用户信息或null
 */
export const getCurrentUser = () => {
  const username = localStorage.getItem('username')
  if (username) {
    const user = users.find(u => u.username === username)
    if (user) {
      return {
        id: user.id,
        username: user.username,
        email: user.email
      }
    }
  }
  return null
}

/**
 * 退出登录
 */
export const logout = () => {
  localStorage.removeItem('isLoggedIn')
  localStorage.removeItem('username')
}

/**
 * 验证邮箱格式
 * @param {string} email - 邮箱地址
 * @returns {boolean} 邮箱格式是否有效
 */
export const validateEmail = (email) => {
  const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
  return emailRegex.test(email)
}

/**
 * 验证密码强度
 * @param {string} password - 密码
 * @returns {Object} 密码强度信息
 */
export const validatePasswordStrength = (password) => {
  let strength = 0
  const feedback = []
  
  // 长度检查
  if (password.length >= 8) {
    strength++
    feedback.push('长度良好')
  } else {
    feedback.push('密码长度至少为8位')
  }
  
  // 包含小写字母
  if (/[a-z]/.test(password)) {
    strength++
  } else {
    feedback.push('包含小写字母会更安全')
  }
  
  // 包含大写字母
  if (/[A-Z]/.test(password)) {
    strength++
  } else {
    feedback.push('包含大写字母会更安全')
  }
  
  // 包含数字
  if (/\d/.test(password)) {
    strength++
  } else {
    feedback.push('包含数字会更安全')
  }
  
  // 包含特殊字符
  if (/[^A-Za-z0-9]/.test(password)) {
    strength++
  } else {
    feedback.push('包含特殊字符会更安全')
  }
  
  // 计算强度等级
  const level = strength < 3 ? '弱' : strength < 5 ? '中' : '强'
  
  return {
    strength,
    level,
    feedback
  }
}

/**
 * 保存用户登录状态到本地存储
 * @param {Object} user - 用户信息
 */
export const saveLoginState = (user) => {
  localStorage.setItem('isLoggedIn', 'true')
  localStorage.setItem('username', user.username)
}

export default {
  login,
  register,
  isLoggedIn,
  getCurrentUser,
  logout,
  validateEmail,
  validatePasswordStrength,
  saveLoginState
}